S3をソースとした時のCodeBuild実行エラー「YAML_FILE_ERROR Message: YAML file does not exist」の対処法

S3をソースとした時のCodeBuild実行エラー「YAML_FILE_ERROR Message: YAML file does not exist」の対処法

Clock Icon2025.01.06

こんにちはこーへいです!

今回はCodeBuildにて「YAML_FILE_ERROR Message: YAML file does not exist」が発生して結構苦戦したので備忘録として記します。

結論

demo
├── buildspec.yml
└── Dockerfile
└── src
    └──...
└── ...

上記の様なディレクトリをzip化する際は、正しいディレクトリで圧縮してください(後述しますが私はdemoディレクトリの一個上の階層でdemoディレクトリ含めてzip化しちゃっていました...)。

~/example/demo 
$ zip -r demo.zip *

正しいディレクトリ

~/example 
$ zip -r demo.zip *

正しくないディレクトリ

経緯

設定確認

貼り付けた画像_2025_01_06_15_48

今回CodeBuildのソースとしてS3を利用した場合の検証を行なっていました。

貼り付けた画像_2025_01_06_15_44

CodeBuildの設定ではS3のオブジェクトキーとして「demo.zip」を指定しています(demo.zipの中にデプロイ用のソースコードや後述するbuildspec.ymlが含まれています)。

貼り付けた画像_2025_01_06_15_53

そしてデフォルトのbuildspec.ymlを利用するように設定していました。

貼り付けた画像_2025_01_06_15_57

S3にはもちろん「demo.zip」を格納しています。

エラー内容

貼り付けた画像_2025_01_06_15_59

貼り付けた画像_2025_01_06_16_00

この様な状況でCodeBuildを動かすと、「DOWNLOAD_SOURCE」フェーズにて「YAML_FILE_ERROR: YAML file does not exist」つまり、buildspec.ymlファイルが無いと怒られてしまいました。

原因

貼り付けた画像_2025_01_06_16_03

貼り付けた画像_2025_01_06_16_04

原因は上記の通り、demo.zipをdemoディレクトリ以下から圧縮していたことが原因でした。これでは「buildspec.yml」ではなくて「demo/buildspec.yml」と指定しなければなりません。

普通に圧縮するべきディレクトリの位置が間違っていただけでした。

おまけ

貼り付けた画像_2025_01_06_16_11

何故すぐにこの問題が解決できなかったかというと、以下の様に正しい位置でzip化した場合に、Macのダブルクリックでzipファイルを展開します。

貼り付けた画像_2025_01_06_16_14

すると上記の通り、zipファイル名を親ディレクトリとして展開される挙動となります。

貼り付けた画像_2025_01_06_16_18

貼り付けた画像_2025_01_06_16_17

しかし、unzipコマンドで展開すると圧縮する前の状態のまま展開されました。

長年Macのダブルクリックでzipファイルを展開していたため展開後のディレクトリ構造の理解があやふやだったため、今回の様なエラーに遭遇したというわけです。

zipファイル名と圧縮する前のディレクトリ名が同じ場合は、Macのダブルクリックで展開した場合、demo/demoみたいな感じにならないので今の今まで間違った理解をしていることに気付けませんでした。

終わりに

それなりに苦戦したトラシューだったのですが、蓋を開けてみればただのzipにまつわるお話でした。

年明けから疲れましたが、詳しくなれてよかったです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.